package com.hxq.ext.delayqueue.demo1;

import lombok.Data;
import org.jetbrains.annotations.NotNull;

import java.util.concurrent.Delayed;
import java.util.concurrent.TimeUnit;

@Data
public class MyDelayTask implements Delayed {

    private final String taskContent;

    private final Long triggerTime;


    public MyDelayTask(String taskContent, Long triggerTime) {
        this.taskContent = taskContent;
        this.triggerTime = triggerTime;
    }

    /**
     * 方法返回这个任务还剩多久时间可以执行，小于0的时候说明可以这个延迟任务到了执行的时间了。
     * @param unit the time unit
     * @return
     */
    @Override
    public long getDelay(@NotNull TimeUnit unit) {
        return unit.convert(triggerTime-System.currentTimeMillis(),TimeUnit.MILLISECONDS);
    }

    /**
     * 这个是对任务排序的，保证最先到延迟时间的任务排到队列的头。
     * @param o the object to be compared.
     * @return
     */
    @Override
    public int compareTo(@NotNull Delayed o) {
        return this.triggerTime.compareTo(((MyDelayTask) o).triggerTime);
    }
}
